package com.zhisheng.demo04_File;

import java.io.File;

/**
 * 创建者： 智晟全哥
 * 练习文件夹的遍历
 *
 */
public class MyFile4 {
    public static void main(String[] args) {
        method1();
        File f = new File("D:\\我的资料\\全套课程体系资料\\杭_20251\\day16-IO流1-File-字节流\\课堂代码\\day16-Stream-File");
        int i = method2(f);
        System.out.println(i);
    }
    // 多层文件夹的遍历,找 day16-Stream-File这个文件夹下有多少个java文件
    // 此时的method2这个方法就是专门处理文件夹的方法,这个方法设计一个参数,文件夹对象
    private static int method2(File dir)  {
        // 代码的健壮性校验
        if(dir == null || !dir.exists() || dir.isFile()){
            return 0;
        }
        int count = 0;
        // 1: 获取dir下面所有的内容
        File[] arr = dir.listFiles();
        // 2: 对arr进行遍历
        for (File file : arr) {
            // 此时的file代表的就是 dir下的一级内容
            if(file.isDirectory()){
                // 说明是一个文件夹
                count+=method2(file);
            }else {
                // 是一个文件
                if(file.getName().endsWith(".java")){
                    // 统计数量
                    count++;
                }
            }
        }
        return count;
    }

    // 单层文件夹遍历
    private static void method1() {
        File f = new File("D:\\store\\资料仓库\\神器资料-很重要！！\\神器资料-就业班专用\\常用API");
        // 获取 f 下面所有的内容,统计文件的个数,及文件夹的个数
        File[] files = f.listFiles();
        int fileCount = 0;
        int dirCount = 0;
        // 遍历 files ,得到数组中的每一个文件或文件夹对象
        for (File file : files) {
            // 此时的file代表的就是f下面的每一个内容,面向file对象,判断是文件还是文件夹,并统计数量即可
            if(file.isFile()){
                fileCount++;
            }else {
                dirCount++;
            }
        }
        System.out.println(f+"下面有:"+fileCount+"个文件,有:"+dirCount+"个文件夹!");
    }
}
